const Koa = require('koa');
const bodyparse = require('koa-bodyparser');  // 解析请求体中的body
const app = new Koa()
const jsonError = require('koa-json-error')
const parameter = require('koa-parameter')
const mongoose = require('mongoose')
const routing = require('./routes')
const { connectionStr } = require('./config')

mongoose.connect(connectionStr, () => console.log('MongoDB 连接成功！'))
mongoose.connection.on('error',console.error)

// 编写错误处理中间件 
app.use(jsonError({
  // postFormat用来定制返回格式， 通过环境变量判断是 生产环境还是 开发环境
  postFormat: (err,{stack, ...rest}) => process.env.NODE_ENV === 'production'? rest: {stack, ...rest}
}))

app.use(bodyparse()) // 要在路由注册前注册
app.use(parameter(app)) // 传app进来，parameter 不单是一个中间件，还可以再上下文ctx中加上一个方法 可以再全局中使用
routing(app)

app.listen(3000, ()=>{
  console.log('3000已启动')
})

